/*
 * Lista.cpp
 *
 *  Created on: 23-03-2012
 *      Author: Hanna SIenkiewicz
 */

#include "Lista.h"
#include <cstdlib>

int Lista::Dlugosc_listy()
{
	return dl;
};

bool Lista::Pusta()
{
	if ( dl == 0)
	{
		return true;
	}
	else
	{
		return false;
	}
};

//**********************************************************************

void Lista::Dodaj_element(int n)
{
	elem *tmp;//wskaznik pomocniczy
	elem *nowy;//nowy wskaznik

	nowy = new elem;
	nowy->liczba = n;
	nowy->wsk_natepny = NULL;//element dodajemy na koniec, dlatego nastepny
						//pokazuje na NULL

	if (head == NULL)//jesli doadajemy pierwszy element
	{
		head = nowy;
	}
	else
	{
		tmp = head;
		while (tmp->wsk_natepny != NULL)
		{
			tmp = tmp->wsk_natepny;//przechodzimy do konca listy
		}
		tmp->wsk_natepny = nowy;//pokazujemy na nowo dodany element
	}
	dl++;//zwiekszamy dlugosc listy
};

//**********************************************************************

void Lista::Usun_ostatni_element()
{
	elem *tmp;//wskaznik pomocniczy

	if (head == NULL)
	{
		cerr << "Lista jest pusta\n";
	}
	else
	{
		tmp = head;
		while (tmp->wsk_natepny->wsk_natepny != NULL)//szukamy przedostatniego elementu
		{
			tmp = tmp->wsk_natepny;
		}
		delete tmp->wsk_natepny;//usuwamy ostatni element
		tmp->wsk_natepny = NULL;
		dl--;
	}
};

//**********************************************************************

void Lista::Usun_pierwszy_element()
{
	elem *tmp;

	if (head == NULL)
	{
		cerr << "Lista jest pusta\n";
	}
	else
	{
		tmp = head;
		head = tmp->wsk_natepny;

		delete tmp;
		dl--;
	}
};

//**********************************************************************

void Lista::Zapelnij_liste()
{
	int n, i;
	cout << "Podaj liczbe losowych liczb\n";
	cin >> n;
	if(cin.fail()){cerr << "Blad to nie jest liczba!\n"; exit(1);}
	if (n <= 0)
	{
		cerr << "Liczba ma byc wieksza od 0\n";
	}
	else
	{
		for (i = 0; i < n; i++)
		{
			Dodaj_element(rand()%n);
		}
	}
};

//**********************************************************************

void Lista::Dodaj_dwa_elementy_na_poczatek()
{
	elem *nowy;
	nowy = new elem;

	int pierwsza_liczba, druga_liczba;
	cout << "Podaj pierwsza liczbe: ";
	cin >> pierwsza_liczba;
	if(cin.fail()){cerr << "Blad to nie jest liczba!\n"; exit(1);}
	cout << "Podaj druga liczbe: ";
	cin >> druga_liczba;
	if(cin.fail()){cerr << "Blad to nie jest liczba!\n"; exit(1);}

	nowy->liczba = druga_liczba;//dodajemy liczbe
	nowy->wsk_natepny = head;//pokazujemy to na co pokazuje pierwszy
	head = nowy;//pierwszy pokazuje na nowo dodany element
	//i od nowa
	nowy = NULL;
	nowy = new elem;
	nowy->liczba = pierwsza_liczba;
	nowy->wsk_natepny = head;
	head = nowy;
	dl = dl +2;
};

//**********************************************************************

void Lista::Pokaz_liste()
{
	int i;
	elem *tmp;
	tmp = head; //wskaznik pomocniczy, by mozna bylo chodzic po liscie

	if (dl > 0)
	{
		cout<<"Oto lista\n";
		for ( i = 0; i < dl; i++)
		{
			cout << tmp->liczba << "\n";
			tmp = tmp->wsk_natepny;//chodzimy wskaznikiem po liscie
		}
	}
	else
	{
		cerr << "Lista jest pusta\n";
	}
}

void Lista:: wyczysc(){
	while(head!=NULL){
		Usun_ostatni_element();
	};
}





